<?php

class MultiRequest
{
	public function __constructor(){ }
	
	public function multiRequest($data, $options = array()) {
	
	  // array of curl handles
	  $curly = array();
	  // data to be returned
	  $result = array();
	
	  // multi handle
	  $mh = curl_multi_init();
	
	  // loop through $data and create curl handles
	  // then add them to the multi-handle
	  foreach ($data as $id => $d) {
	
		$curly[$id] = curl_init();
	
		$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
		curl_setopt($curly[$id], CURLOPT_URL,            $url);
		curl_setopt($curly[$id], CURLOPT_HEADER,         0);
		curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
	
		// post?
		if (is_array($d)) {
		  if (!empty($d['post'])) {
			curl_setopt($curly[$id], CURLOPT_POST,       1);
			curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
		  }
		}
	
		// extra options?
		if (!empty($options)) {
		  curl_setopt_array($curly[$id], $options);
		}
	
		curl_multi_add_handle($mh, $curly[$id]);
	  }
	
	  // execute the handles
	  $running = null;
	  do {
		curl_multi_exec($mh, $running);
	  } while($running > 0);
	
	  // get content and remove handles
	  foreach($curly as $id => $c) {
		$result[$id] = curl_multi_getcontent($c);
		curl_multi_remove_handle($mh, $c);
	  }
	
	  // all done
	  curl_multi_close($mh);
	
	  return $result;
	}
}
?>

